﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//using Sisco.AccesoDatos;

namespace Sisco.LogicaNegocio
{
    public class UsuarioBLL
    {
        public List<AccesoDatos.USUARIO> Listar()
        {
            AccesoDatos.UsuarioDAO usuarioDAO = new AccesoDatos.UsuarioDAO();

            return usuarioDAO.Listar();
        }        

        public List<AccesoDatos.USUARIO> ListarAsistenteReparador()
        {
            List<AccesoDatos.USUARIO> lista = this.Listar();

            return lista.Where(x => x.REPARADOR == 1 && x.ELIMINADO == 0).ToList();
        }

        public int Registrar(AccesoDatos.USUARIO usuario)
        {
            AccesoDatos.UsuarioDAO usuarioDAO = new AccesoDatos.UsuarioDAO();

            return usuarioDAO.Registrar(usuario);
        }

        public List<AccesoDatos.USUARIO> Buscar(string atributo, string valor)
        {
            List<AccesoDatos.USUARIO> resultado = new List<AccesoDatos.USUARIO>();

            if (!string.IsNullOrWhiteSpace(valor))
            {
                List<AccesoDatos.USUARIO> lista = this.Listar();

                switch (atributo)
                {
                    case "CODIGO_RRHH":
                        resultado = lista.Where(x => (x.CODIGO_RRHH ?? "").Contains(valor) && x.ELIMINADO == 0).ToList();
                        break;
                    case "NOMBRE":
                        resultado = lista.Where(x => (x.NOMBRES ?? "").Contains(valor) && x.ELIMINADO == 0).ToList();
                        break;
                    case "APELLIDOS":
                        resultado = lista.Where(x => (x.APELLIDOS ?? "").Contains(valor) && x.ELIMINADO == 0).ToList();
                        break;
                    case "NOMBRECOMPLETO":
                        resultado = lista.Where(x => (x.NOMBRECOMPLETO ?? "").Contains(valor) && x.ELIMINADO == 0).ToList();
                        break;
                }
            }
            else
            {
                resultado = this.Listar();
            }

            return resultado;
        }

        public List<AccesoDatos.USUARIO> BuscarUsuario(string nombre, string apellido)
        {
            List<AccesoDatos.USUARIO> resultado = new List<AccesoDatos.USUARIO>();
            List<AccesoDatos.USUARIO> lista = this.Listar();

            resultado = lista.Where(x => (x.NOMBRES ?? "") == nombre && (x.APELLIDOS ?? "") == apellido && x.ELIMINADO == 0).ToList();
            return resultado;
        }

        public List<AccesoDatos.USUARIO> BuscarUsuario(string codRRHH)
        {
            List<AccesoDatos.USUARIO> resultado = new List<AccesoDatos.USUARIO>();
            List<AccesoDatos.USUARIO> lista = this.Listar();

            resultado = lista.Where(x => (x.CODIGO_RRHH != null ? x.CODIGO_RRHH.Trim() : string.Empty) == codRRHH && x.ELIMINADO == 0).ToList();
            return resultado;
        }

        public int Modificar(AccesoDatos.USUARIO selectedUsuario, AccesoDatos.USUARIO updUsuario)
        {
            AccesoDatos.UsuarioDAO usuarioDAO = new AccesoDatos.UsuarioDAO();
            return usuarioDAO.Modificar(selectedUsuario, updUsuario);
        }

        public System.Data.DataTable Rep_ListarUsuario(int? idSucursal, int? idDpto)
        {
            AccesoDatos.UsuarioDAO usuarioDAO = new AccesoDatos.UsuarioDAO();
            return usuarioDAO.USP_ListarUsuario(idSucursal, idDpto);
        }

        public AccesoDatos.USUARIO GetUsuario(int idUsuario)
        {
            List<AccesoDatos.USUARIO> lista = this.Listar();

            return lista.SingleOrDefault(x => x.ID.Equals(idUsuario) && x.ELIMINADO.Equals(0));
        }

        public AccesoDatos.USUARIO GetUsuarioSistema(string usuario, string clave)
        {
            List<AccesoDatos.USUARIO> usuarios = ListarAsistenteReparador();
            return usuarios.SingleOrDefault(x => x.USUARIO_SIST.Trim().Equals(usuario) && x.PASSWORD_SIST.Trim().Equals(clave));
        }
    }
}
